﻿Imports System.Xml

Namespace Objects

    ''' <summary>
    ''' Gebruikt voor kasblad en tussendoor
    ''' </summary>
    ''' <remarks></remarks>
    Public Class PrintKasbladDocument
        Inherits PrintVerkoopDocument

#Region "Protected properties"

        Protected Overrides ReadOnly Property FooterLineCount() As Integer
            Get
                Return 3
            End Get
        End Property

        Protected Overrides ReadOnly Property NaamSjabloon() As String
            Get
                Return "kasblad.flo"
            End Get
        End Property

        Public ReadOnly Property IsTussendoor() As Boolean
            Get
                Return _verkoop.IdSoort = Constants.VerkoopsoortIds.TUSSENDOOR
            End Get
        End Property

#End Region

#Region "Constructor/Initialisatie"

        Public Sub New(ByVal verkoop As ArtikelsDataSet.VerkopenRow)
            MyBase.New(verkoop)
        End Sub

#End Region

#Region "Protected methods"

        Protected Overrides Sub InitializePrinter()
            Me.PrinterSettings.PrinterName = Configuratie.Printer
        End Sub

        Protected Overrides Function GetVerkoopsPrintDetail(ByVal detail As VerkoopsDetail, ByVal volgnummerKlant As String) As PrintVerkoopDocument.VerkoopsPrintDetail
            Return New KasbladDetail(detail, Me, volgnummerKlant)
        End Function

        ''' <summary>
        ''' 
        ''' </summary>
        ''' <param name="top">Bovenkantpositie vanaf waar geprint moet worden</param>
        ''' <returns>Bovenkant-positie van de volgende rij in dpi</returns>
        Protected Overrides Function PrintHoofding(ByVal top As Integer) As Integer
            Dim bedragBancontact As Decimal = If(_verkoop.IsBedragBancontactNull, 0D, _verkoop.BedragBancontact)
            Dim bedragMaaltijdcheques As Decimal = If(_verkoop.IsBedragMaaltijdchequesNull, 0D, _verkoop.BedragMaaltijdcheques)
            Dim verkoopTheoretischKasTotaal As Decimal = _verkoop.Begintotaal + _totaalBedrag + _verkoop.InUitKasBedrag - _
               _verkoop.NaarBankBedrag - bedragBancontact - bedragMaaltijdcheques
            Dim kasVerschil As Decimal = _verkoop.Eindtotaal - verkoopTheoretischKasTotaal

            Dim hoofdingBlok As DocumentBlok = GetBlok("hoofding")

            Select Case _verkoop.IdSoort
                Case Constants.VerkoopsoortIds.WINKEL
                    hoofdingBlok.SetCelTekst("titel", "Kasblad" & GetTitleSuffix())
                Case Constants.VerkoopsoortIds.TUSSENDOOR
                    hoofdingBlok.SetCelTekst("titel", "Kasblad tussendoor" & GetTitleSuffix())
                Case Else
                    Throw New Exception("Een verkoop van deze soort kan (nog) niet als kasblad afgedrukt worden")
            End Select

            hoofdingBlok.SetCelTekst("datum", String.Format("{0:dddd d/M/yyyy}", _verkoop.Datum))
            hoofdingBlok.SetCelTekst("begintotaal", _verkoop.Begintotaal.ToString("c"))
            hoofdingBlok.SetCelTekst("verkoop", _totaalBedrag.ToString("c"))
            hoofdingBlok.SetCelTekst("eindtotaal", _verkoop.Eindtotaal.ToString("c"))
            hoofdingBlok.SetCelTekst("theoretischkastotaal", verkoopTheoretischKasTotaal.ToString("c"))
            hoofdingBlok.SetCelTekst("kasverschil", kasVerschil.ToString("c"))
            hoofdingBlok.SetCelTekst("winkelier", _naamWinkelier)

            hoofdingBlok.SetCelTekst("commentaarbegin", _verkoop.CommentaarBegintotaal)
            hoofdingBlok.SetCelTekst("commentaareind", _verkoop.CommentaarEindtotaal)
            hoofdingBlok.SetCelTekst("inuitkas", _verkoop.InUitKasBedrag.ToString("c"))
            hoofdingBlok.SetCelTekst("inuitkasreden", _verkoop.InUitKasReden)
            hoofdingBlok.SetCelTekst("bancontact", bedragBancontact.ToString("c"))
            hoofdingBlok.SetCelTekst("maaltijdcheques", bedragMaaltijdcheques.ToString("c"))
            hoofdingBlok.SetCelTekst("naarbank", _verkoop.NaarBankBedrag.ToString("c"))
            hoofdingBlok.SetCelTekst("naarbankreferentie", _verkoop.NaarBankReferentie)
            hoofdingBlok.SetCelTekst("naarbanknaam", _verkoop.NaarBankNaam)

            top = PrintBlok(hoofdingBlok, top)
            Return top
        End Function

        ''' <summary>
        ''' Overschrijf deze methode om iets af te drukken bovenaan vervolgpagina's
        ''' </summary>
        ''' <param name="top">Bovenkantpositie vanaf waar geprint moet worden</param>
        ''' <returns>Bovenkant-positie van de volgende rij in dpi</returns>
        Protected Overrides Function PrintVervolgHoofding(ByVal top As Integer) As Integer
            Dim blok As DocumentBlok = GetBlok("vervolghoofding")
            blok.SetCelTekst("vervolghoofding", String.Format("Vervolg kasblad van {0:d/M/yyyy}", _verkoop.Datum))
            top = PrintBlok(blok, top)
            Return top
        End Function

        Protected Overrides Sub PrintVoettekst(ByVal top As Integer)
            Dim totaalBlok As DocumentBlok = GetBlok("totaal")
            totaalBlok.SetCelTekst("totaal", _totaalBedrag.ToString("c"))
            top = PrintBlok(totaalBlok, top)

            top = PrintBtwBlok(top)

            Dim voettekstBlok As DocumentBlok = GetBlok("voettekst")
            top = PrintBlok(voettekstBlok, top)
        End Sub

#End Region

        Protected Class KasbladDetail
            Inherits VerkoopsPrintDetail

            Public Sub New(ByVal verkoopsDetail As VerkoopsDetail, ByVal document As PrintKasbladDocument, ByVal volgnummerKlant As String)
                MyBase.New(verkoopsDetail, document, volgnummerKlant)
            End Sub

            ''' <summary>
            ''' 
            ''' </summary>
            ''' <param name="top">Bovenkant vanaf waar geprint moet worden</param>
            ''' <returns>Bovenkant-positie van de volgende rij in dpi</returns>
            Public Overrides Function Print(ByVal sjabloonRij As DocumentRij, ByVal top As Integer) As Integer

                Dim document As PrintKasbladDocument = DirectCast(_document, PrintKasbladDocument)
                If (_verkoopsDetail.IsBancontact AndAlso _volgnummerKlant.Length > 0) Then
                    _volgnummerKlant = _volgnummerKlant.Insert(0, ".") ' bancontact tonen met een puntje bij het klantnummer
                End If
                If (_verkoopsDetail.IsMaaltijdcheque AndAlso _volgnummerKlant.Length > 0) Then
                    _volgnummerKlant = _volgnummerKlant.Insert(0, "..") ' maaltijdcheque tonen met twee puntjes bij het klantnummer
                End If
                If (document.IsTussendoor) Then _volgnummerKlant = "" ' volgnummer klant heeft geen belang voor tussendoor

                If (_verkoopsDetail.PrijsZonderStatiegeld <> 0D) Then
                    sjabloonRij.SetCelTekst("volgnummerklant", _volgnummerKlant)
                    sjabloonRij.SetCelTekst("omschrijving", _verkoopsDetail.Omschrijving)
                    sjabloonRij.SetCelTekst("prijs", _verkoopsDetail.PrijsZonderStatiegeld.ToString("c"))
                    sjabloonRij.SetCelTekst("aantal", _verkoopsDetail.Aantal.ToString())
                    sjabloonRij.SetCelTekst("totaal", _verkoopsDetail.TotaalPrijsZonderStatiegeld.ToString("c"))
                    sjabloonRij.SetCelTekst("btw", String.Format("{0}%", _verkoopsDetail.BTW))
                    top = _document.PrintRij(sjabloonRij, top)
                    _volgnummerKlant = "" ' zorg ervoor dat dit hieronder niet nog eens afgedrukt wordt
                End If

                If (_verkoopsDetail.AfTeDrukkenStatiegeldPerStuk <> 0D) Then
                    sjabloonRij.SetCelTekst("volgnummerklant", _volgnummerKlant)
                    If (_verkoopsDetail.TotaalPrijsZonderStatiegeld = 0D) Then
                        sjabloonRij.SetCelTekst("omschrijving", _verkoopsDetail.Omschrijving)
                    Else
                        sjabloonRij.SetCelTekst("omschrijving", "Leeggoed " & _verkoopsDetail.Omschrijving)
                    End If
                    sjabloonRij.SetCelTekst("prijs", _verkoopsDetail.AfTeDrukkenStatiegeldPerStuk.ToString("c"))
                    sjabloonRij.SetCelTekst("aantal", _verkoopsDetail.Aantal.ToString())
                    sjabloonRij.SetCelTekst("totaal", _verkoopsDetail.TotaalAfTeDrukkenStatiegeld.ToString("c"))
                    sjabloonRij.SetCelTekst("btw", "0%")
                    top = _document.PrintRij(sjabloonRij, top)
                End If

                Return top
            End Function

        End Class

    End Class

End Namespace
